package org.aplombh.java.interview.newcoder;

import java.util.Scanner;

//HJ71 字符串通配符
public class HJ71_字符串通配符 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String a = in.nextLine().toLowerCase();
            String b = in.nextLine().toLowerCase();
            System.out.println(isMatch(b, a));
        }
    }

    public static boolean isMatch(String s, String p) {

        s = " " + s;
        p = " " + p;

        char[] cs = s.toCharArray();
        char[] cp = p.toCharArray();

        int m = s.length(), n = p.length();

        boolean[][] dp = new boolean[m + 1][n + 1];

        dp[0][0] = true;

        for (int j = 1; j < n; j++) {
            if (cp[j] == '*') dp[0][j] = dp[0][j - 1];
        }

        // i 表示s的位置
        // j 表示p的位置
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                // 匹配任意字符
                if (cs[i] == cp[j])
                    dp[i][j] = dp[i - 1][j - 1];
                // 可以使用通配符匹配
                else if (('0' <= cs[i] && cs[i] <= '9') || ('a' <= cs[i] && cs[i] <= 'z')) {
                    if (cp[j] == '?')
                        dp[i][j] = dp[i - 1][j - 1];
                    else if (cp[j] == '*') {
                        // 匹配1次或者0次
                        dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
                    }
                    // 特殊情况，*匹配0次
                } else if (cp[j] == '*') {
                    dp[i][j] = dp[i][j - 1];
                }
            }
        }
        return dp[m - 1][n - 1];
    }
}